package cn.fx.baseweb.test.controller;

import cn.fx.framework.W;
import cn.fx.framework.redis.MyRedisTemplate;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/test")
public class RedisTestController {
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private MyRedisTemplate myRedisTemplate;


    /**
     * 使用redisTemplate原生方法直接存取数据：
     *
     * @return
     */
    @RequestMapping("rawRedis")
    public String rawRedis() {
        StringBuilder sb = new StringBuilder();

        //1、增加key,value缓存
        redisTemplate.opsForValue().set("101", "张三");
        sb.append("101:" + redisTemplate.opsForValue().get("101").toString());

        Map<String, String> map = new HashMap<>();
        map.put("1", "Alipay");
        map.put("2", "BankUnion");
        //2、增加hash缓存
        redisTemplate.opsForHash().putAll("payType", map);
        sb.append("payType" + redisTemplate.opsForHash().values("payType"));

        //3、删除创建的缓存
        //redisTemplate.delete("101");
        //redisTemplate.delete("payType");

        return sb.toString();
    }

    /**
     * 使用自定义MyRedisTemplate包装的方法存取数据
     *
     * @return
     */
    @RequestMapping("myRedis")
    public String myRedis() {
        StringBuilder sb = new StringBuilder();

        // 1、使用redisTemplate原生方法简单包装存取对象，使用前缀，没有使用缓存配置名
        myRedisTemplate.set("101", "李四");
        sb.append("101:" + myRedisTemplate.get("101").toString());

        Map<String, String> map = new HashMap<>();
        map.put("1", "Alipay");
        map.put("2", "BankUnion");

        // 2、使用包装类Cache存取对象，使用“前缀:使用缓存名称::key”组合key
        myRedisTemplate.putCacheObject("dict", "payType", map);
        Map<String, String> cacheObject = (Map<String, String>) myRedisTemplate.getCacheObject("dict", "payType");
        sb.append("dict:payType:" + cacheObject.toString());

        //删除创建的缓存
        //myRedisTemplate.delete("101");
        //myRedisTemplate.evictCache("dict","payType");

        sb.append(W.getApplicationHandler().getRedisKeyPrefix());

        return sb.toString();
    }
}
